{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "'{ \"a\": \"Mozilla\\\\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\\\\/535.11 (KHTML, like Gecko) Chrome\\\\/17.0.963.78 Safari\\\\/535.11\", \"c\": \"US\", \"nk\": 1, \"tz\": \"America\\\\/New_York\", \"gr\": \"MA\", \"g\": \"A6qOVH\", \"h\": \"wfLQtf\", \"l\": \"orofrog\", \"al\": \"en-US,en;q=0.8\", \"hh\": \"1.usa.gov\", \"r\": \"http:\\\\/\\\\/www.facebook.com\\\\/l\\\\/7AQEFzjSi\\\\/1.usa.gov\\\\/wfLQtf\", \"u\": \"http:\\\\/\\\\/www.ncbi.nlm.nih.gov\\\\/pubmed\\\\/22415991\", \"t\": 1331923247, \"hc\": 1331822918, \"cy\": \"Danvers\", \"ll\": [ 42.576698, -70.954903 ] }\\n'"
      ]
     },
     "execution_count": 1,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "path = './example.txt'\n",
    "open(path).readline()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "import json\n",
    "records = [json.loads(line) for line in open(path)]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{'a': 'GoogleMaps/RochesterNY',\n",
       " 'c': 'US',\n",
       " 'cy': 'Provo',\n",
       " 'g': 'mwszkS',\n",
       " 'gr': 'UT',\n",
       " 'h': 'mwszkS',\n",
       " 'hc': 1308262393,\n",
       " 'hh': 'j.mp',\n",
       " 'l': 'bitly',\n",
       " 'll': [40.218102, -111.613297],\n",
       " 'nk': 0,\n",
       " 'r': 'http://www.AwareMap.com/',\n",
       " 't': 1331923249,\n",
       " 'tz': 'America/Denver',\n",
       " 'u': 'http://www.monroecounty.gov/etc/911/rss.php'}"
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "records[1]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "3560"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "len(records)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [],
   "source": [
    "time_zones = [rec['tz'] for rec in records if 'tz' in rec]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "3440"
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "len(time_zones)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "['America/New_York',\n",
       " 'America/Denver',\n",
       " 'America/New_York',\n",
       " 'America/Sao_Paulo',\n",
       " 'America/New_York',\n",
       " 'America/New_York',\n",
       " 'Europe/Warsaw',\n",
       " '',\n",
       " '',\n",
       " '']"
      ]
     },
     "execution_count": 11,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "time_zones[:10]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [],
   "source": [
    "def get_counts(sequence):\n",
    "    counts = {}\n",
    "    for x in sequence:\n",
    "        if x in counts:\n",
    "            counts[x] += 1\n",
    "        else:\n",
    "            counts[x] = 1\n",
    "    return counts"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [],
   "source": [
    "counts = get_counts(time_zones)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{'': 521,\n",
       " 'Africa/Cairo': 3,\n",
       " 'Africa/Casablanca': 1,\n",
       " 'Africa/Ceuta': 2,\n",
       " 'Africa/Johannesburg': 1,\n",
       " 'Africa/Lusaka': 1,\n",
       " 'America/Anchorage': 5,\n",
       " 'America/Argentina/Buenos_Aires': 1,\n",
       " 'America/Argentina/Cordoba': 1,\n",
       " 'America/Argentina/Mendoza': 1,\n",
       " 'America/Bogota': 3,\n",
       " 'America/Caracas': 1,\n",
       " 'America/Chicago': 400,\n",
       " 'America/Chihuahua': 2,\n",
       " 'America/Costa_Rica': 1,\n",
       " 'America/Denver': 191,\n",
       " 'America/Edmonton': 6,\n",
       " 'America/Guayaquil': 2,\n",
       " 'America/Halifax': 4,\n",
       " 'America/Indianapolis': 20,\n",
       " 'America/La_Paz': 1,\n",
       " 'America/Lima': 1,\n",
       " 'America/Los_Angeles': 382,\n",
       " 'America/Managua': 3,\n",
       " 'America/Mazatlan': 1,\n",
       " 'America/Mexico_City': 15,\n",
       " 'America/Monterrey': 1,\n",
       " 'America/Montevideo': 1,\n",
       " 'America/Montreal': 9,\n",
       " 'America/New_York': 1251,\n",
       " 'America/Phoenix': 20,\n",
       " 'America/Puerto_Rico': 10,\n",
       " 'America/Rainy_River': 25,\n",
       " 'America/Recife': 2,\n",
       " 'America/Santo_Domingo': 1,\n",
       " 'America/Sao_Paulo': 33,\n",
       " 'America/St_Kitts': 1,\n",
       " 'America/Tegucigalpa': 1,\n",
       " 'America/Vancouver': 12,\n",
       " 'America/Winnipeg': 4,\n",
       " 'Asia/Amman': 2,\n",
       " 'Asia/Bangkok': 6,\n",
       " 'Asia/Beirut': 4,\n",
       " 'Asia/Calcutta': 9,\n",
       " 'Asia/Dubai': 4,\n",
       " 'Asia/Harbin': 3,\n",
       " 'Asia/Hong_Kong': 10,\n",
       " 'Asia/Istanbul': 9,\n",
       " 'Asia/Jakarta': 3,\n",
       " 'Asia/Jerusalem': 3,\n",
       " 'Asia/Karachi': 3,\n",
       " 'Asia/Kuala_Lumpur': 3,\n",
       " 'Asia/Kuching': 1,\n",
       " 'Asia/Manila': 1,\n",
       " 'Asia/Nicosia': 1,\n",
       " 'Asia/Novosibirsk': 1,\n",
       " 'Asia/Pontianak': 1,\n",
       " 'Asia/Riyadh': 1,\n",
       " 'Asia/Seoul': 5,\n",
       " 'Asia/Tokyo': 37,\n",
       " 'Asia/Yekaterinburg': 1,\n",
       " 'Australia/NSW': 6,\n",
       " 'Australia/Queensland': 1,\n",
       " 'Chile/Continental': 6,\n",
       " 'Europe/Amsterdam': 22,\n",
       " 'Europe/Athens': 6,\n",
       " 'Europe/Belgrade': 2,\n",
       " 'Europe/Berlin': 28,\n",
       " 'Europe/Bratislava': 3,\n",
       " 'Europe/Brussels': 4,\n",
       " 'Europe/Bucharest': 4,\n",
       " 'Europe/Budapest': 5,\n",
       " 'Europe/Copenhagen': 5,\n",
       " 'Europe/Dublin': 3,\n",
       " 'Europe/Helsinki': 10,\n",
       " 'Europe/Lisbon': 8,\n",
       " 'Europe/Ljubljana': 1,\n",
       " 'Europe/London': 74,\n",
       " 'Europe/Madrid': 35,\n",
       " 'Europe/Malta': 2,\n",
       " 'Europe/Moscow': 10,\n",
       " 'Europe/Oslo': 10,\n",
       " 'Europe/Paris': 14,\n",
       " 'Europe/Prague': 10,\n",
       " 'Europe/Riga': 2,\n",
       " 'Europe/Rome': 27,\n",
       " 'Europe/Skopje': 1,\n",
       " 'Europe/Sofia': 1,\n",
       " 'Europe/Stockholm': 14,\n",
       " 'Europe/Uzhgorod': 1,\n",
       " 'Europe/Vienna': 6,\n",
       " 'Europe/Vilnius': 2,\n",
       " 'Europe/Volgograd': 1,\n",
       " 'Europe/Warsaw': 16,\n",
       " 'Europe/Zurich': 4,\n",
       " 'Pacific/Auckland': 11,\n",
       " 'Pacific/Honolulu': 36}"
      ]
     },
     "execution_count": 15,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "counts"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 得到前十位的时区及其计数\n",
    "def top_counts(count_dict, n=10):\n",
    "    value_key_pairs = [(count, tz) for tz, count in count_dict.items()]\n",
    "    value_key_pairs.sort()\n",
    "    return value_key_pairs[-n:]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[(33, 'America/Sao_Paulo'),\n",
       " (35, 'Europe/Madrid'),\n",
       " (36, 'Pacific/Honolulu'),\n",
       " (37, 'Asia/Tokyo'),\n",
       " (74, 'Europe/London'),\n",
       " (191, 'America/Denver'),\n",
       " (382, 'America/Los_Angeles'),\n",
       " (400, 'America/Chicago'),\n",
       " (521, ''),\n",
       " (1251, 'America/New_York')]"
      ]
     },
     "execution_count": 17,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "top_counts(counts)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 利用pandas进行操作\n",
    "import pandas as pd\n",
    "import numpy as np"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [],
   "source": [
    "frame = pd.DataFrame(records)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'pandas.core.frame.DataFrame'>\n",
      "RangeIndex: 3560 entries, 0 to 3559\n",
      "Data columns (total 18 columns):\n",
      "_heartbeat_    120 non-null float64\n",
      "a              3440 non-null object\n",
      "al             3094 non-null object\n",
      "c              2919 non-null object\n",
      "cy             2919 non-null object\n",
      "g              3440 non-null object\n",
      "gr             2919 non-null object\n",
      "h              3440 non-null object\n",
      "hc             3440 non-null float64\n",
      "hh             3440 non-null object\n",
      "kw             93 non-null object\n",
      "l              3440 non-null object\n",
      "ll             2919 non-null object\n",
      "nk             3440 non-null float64\n",
      "r              3440 non-null object\n",
      "t              3440 non-null float64\n",
      "tz             3440 non-null object\n",
      "u              3440 non-null object\n",
      "dtypes: float64(4), object(14)\n",
      "memory usage: 500.7+ KB\n"
     ]
    }
   ],
   "source": [
    "frame.info()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0     America/New_York\n",
       "1       America/Denver\n",
       "2     America/New_York\n",
       "3    America/Sao_Paulo\n",
       "4     America/New_York\n",
       "5     America/New_York\n",
       "6        Europe/Warsaw\n",
       "7                     \n",
       "8                     \n",
       "9                     \n",
       "Name: tz, dtype: object"
      ]
     },
     "execution_count": 21,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "frame[:10]['tz']"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {},
   "outputs": [],
   "source": [
    "tz_counts = frame['tz'].value_counts()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "America/New_York                  1251\n",
       "                                   521\n",
       "America/Chicago                    400\n",
       "America/Los_Angeles                382\n",
       "America/Denver                     191\n",
       "Europe/London                       74\n",
       "Asia/Tokyo                          37\n",
       "Pacific/Honolulu                    36\n",
       "Europe/Madrid                       35\n",
       "America/Sao_Paulo                   33\n",
       "Europe/Berlin                       28\n",
       "Europe/Rome                         27\n",
       "America/Rainy_River                 25\n",
       "Europe/Amsterdam                    22\n",
       "America/Indianapolis                20\n",
       "America/Phoenix                     20\n",
       "Europe/Warsaw                       16\n",
       "America/Mexico_City                 15\n",
       "Europe/Paris                        14\n",
       "Europe/Stockholm                    14\n",
       "America/Vancouver                   12\n",
       "Pacific/Auckland                    11\n",
       "Asia/Hong_Kong                      10\n",
       "Europe/Oslo                         10\n",
       "Europe/Helsinki                     10\n",
       "America/Puerto_Rico                 10\n",
       "Europe/Prague                       10\n",
       "Europe/Moscow                       10\n",
       "Asia/Calcutta                        9\n",
       "Asia/Istanbul                        9\n",
       "                                  ... \n",
       "Europe/Vilnius                       2\n",
       "Asia/Pontianak                       1\n",
       "Europe/Skopje                        1\n",
       "Europe/Volgograd                     1\n",
       "America/Lima                         1\n",
       "America/St_Kitts                     1\n",
       "America/Argentina/Buenos_Aires       1\n",
       "Asia/Nicosia                         1\n",
       "Africa/Lusaka                        1\n",
       "Asia/Yekaterinburg                   1\n",
       "America/La_Paz                       1\n",
       "Asia/Novosibirsk                     1\n",
       "America/Argentina/Mendoza            1\n",
       "Europe/Ljubljana                     1\n",
       "America/Caracas                      1\n",
       "Europe/Uzhgorod                      1\n",
       "Asia/Riyadh                          1\n",
       "Australia/Queensland                 1\n",
       "Asia/Manila                          1\n",
       "America/Tegucigalpa                  1\n",
       "America/Mazatlan                     1\n",
       "Africa/Johannesburg                  1\n",
       "America/Santo_Domingo                1\n",
       "America/Argentina/Cordoba            1\n",
       "America/Montevideo                   1\n",
       "America/Monterrey                    1\n",
       "Africa/Casablanca                    1\n",
       "Europe/Sofia                         1\n",
       "America/Costa_Rica                   1\n",
       "Asia/Kuching                         1\n",
       "Name: tz, Length: 97, dtype: int64"
      ]
     },
     "execution_count": 23,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "tz_counts"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "America/New_York       1251\n",
       "Unknown                 521\n",
       "America/Chicago         400\n",
       "America/Los_Angeles     382\n",
       "America/Denver          191\n",
       "Missing                 120\n",
       "Europe/London            74\n",
       "Asia/Tokyo               37\n",
       "Pacific/Honolulu         36\n",
       "Europe/Madrid            35\n",
       "Name: tz, dtype: int64"
      ]
     },
     "execution_count": 24,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 可视化数据\n",
    "clean_tz = frame['tz'].fillna('Missing')\n",
    "clean_tz[clean_tz==''] = 'Unknown'\n",
    "tz_counts = clean_tz.value_counts()\n",
    "tz_counts[:10]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {},
   "outputs": [],
   "source": [
    "#可视化\n",
    "import seaborn as sns"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.axes._subplots.AxesSubplot at 0x7f5b870dd8>"
      ]
     },
     "execution_count": 26,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7f5b8706a0>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "subset = tz_counts[:10]\n",
    "sns.barplot(y=subset.index, x=subset.values)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "'GoogleMaps/RochesterNY'"
      ]
     },
     "execution_count": 28,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# a字段含有执行url短缩操作的浏览器、设备、应用程序等信息\n",
    "frame['a'][1]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>_heartbeat_</th>\n",
       "      <th>a</th>\n",
       "      <th>al</th>\n",
       "      <th>c</th>\n",
       "      <th>cy</th>\n",
       "      <th>g</th>\n",
       "      <th>gr</th>\n",
       "      <th>h</th>\n",
       "      <th>hc</th>\n",
       "      <th>hh</th>\n",
       "      <th>kw</th>\n",
       "      <th>l</th>\n",
       "      <th>ll</th>\n",
       "      <th>nk</th>\n",
       "      <th>r</th>\n",
       "      <th>t</th>\n",
       "      <th>tz</th>\n",
       "      <th>u</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>NaN</td>\n",
       "      <td>Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKi...</td>\n",
       "      <td>en-US,en;q=0.8</td>\n",
       "      <td>US</td>\n",
       "      <td>Danvers</td>\n",
       "      <td>A6qOVH</td>\n",
       "      <td>MA</td>\n",
       "      <td>wfLQtf</td>\n",
       "      <td>1.331823e+09</td>\n",
       "      <td>1.usa.gov</td>\n",
       "      <td>NaN</td>\n",
       "      <td>orofrog</td>\n",
       "      <td>[42.576698, -70.954903]</td>\n",
       "      <td>1.0</td>\n",
       "      <td>http://www.facebook.com/l/7AQEFzjSi/1.usa.gov/...</td>\n",
       "      <td>1.331923e+09</td>\n",
       "      <td>America/New_York</td>\n",
       "      <td>http://www.ncbi.nlm.nih.gov/pubmed/22415991</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>NaN</td>\n",
       "      <td>GoogleMaps/RochesterNY</td>\n",
       "      <td>NaN</td>\n",
       "      <td>US</td>\n",
       "      <td>Provo</td>\n",
       "      <td>mwszkS</td>\n",
       "      <td>UT</td>\n",
       "      <td>mwszkS</td>\n",
       "      <td>1.308262e+09</td>\n",
       "      <td>j.mp</td>\n",
       "      <td>NaN</td>\n",
       "      <td>bitly</td>\n",
       "      <td>[40.218102, -111.613297]</td>\n",
       "      <td>0.0</td>\n",
       "      <td>http://www.AwareMap.com/</td>\n",
       "      <td>1.331923e+09</td>\n",
       "      <td>America/Denver</td>\n",
       "      <td>http://www.monroecounty.gov/etc/911/rss.php</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>NaN</td>\n",
       "      <td>Mozilla/4.0 (compatible; MSIE 8.0; Windows NT ...</td>\n",
       "      <td>en-US</td>\n",
       "      <td>US</td>\n",
       "      <td>Washington</td>\n",
       "      <td>xxr3Qb</td>\n",
       "      <td>DC</td>\n",
       "      <td>xxr3Qb</td>\n",
       "      <td>1.331920e+09</td>\n",
       "      <td>1.usa.gov</td>\n",
       "      <td>NaN</td>\n",
       "      <td>bitly</td>\n",
       "      <td>[38.9007, -77.043098]</td>\n",
       "      <td>1.0</td>\n",
       "      <td>http://t.co/03elZC4Q</td>\n",
       "      <td>1.331923e+09</td>\n",
       "      <td>America/New_York</td>\n",
       "      <td>http://boxer.senate.gov/en/press/releases/0316...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>NaN</td>\n",
       "      <td>Mozilla/5.0 (Macintosh; Intel Mac OS X 10_6_8)...</td>\n",
       "      <td>pt-br</td>\n",
       "      <td>BR</td>\n",
       "      <td>Braz</td>\n",
       "      <td>zCaLwp</td>\n",
       "      <td>27</td>\n",
       "      <td>zUtuOu</td>\n",
       "      <td>1.331923e+09</td>\n",
       "      <td>1.usa.gov</td>\n",
       "      <td>NaN</td>\n",
       "      <td>alelex88</td>\n",
       "      <td>[-23.549999, -46.616699]</td>\n",
       "      <td>0.0</td>\n",
       "      <td>direct</td>\n",
       "      <td>1.331923e+09</td>\n",
       "      <td>America/Sao_Paulo</td>\n",
       "      <td>http://apod.nasa.gov/apod/ap120312.html</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>NaN</td>\n",
       "      <td>Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKi...</td>\n",
       "      <td>en-US,en;q=0.8</td>\n",
       "      <td>US</td>\n",
       "      <td>Shrewsbury</td>\n",
       "      <td>9b6kNl</td>\n",
       "      <td>MA</td>\n",
       "      <td>9b6kNl</td>\n",
       "      <td>1.273672e+09</td>\n",
       "      <td>bit.ly</td>\n",
       "      <td>NaN</td>\n",
       "      <td>bitly</td>\n",
       "      <td>[42.286499, -71.714699]</td>\n",
       "      <td>0.0</td>\n",
       "      <td>http://www.shrewsbury-ma.gov/selco/</td>\n",
       "      <td>1.331923e+09</td>\n",
       "      <td>America/New_York</td>\n",
       "      <td>http://www.shrewsbury-ma.gov/egov/gallery/1341...</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   _heartbeat_                                                  a  \\\n",
       "0          NaN  Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKi...   \n",
       "1          NaN                             GoogleMaps/RochesterNY   \n",
       "2          NaN  Mozilla/4.0 (compatible; MSIE 8.0; Windows NT ...   \n",
       "3          NaN  Mozilla/5.0 (Macintosh; Intel Mac OS X 10_6_8)...   \n",
       "4          NaN  Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKi...   \n",
       "\n",
       "               al   c          cy       g  gr       h            hc  \\\n",
       "0  en-US,en;q=0.8  US     Danvers  A6qOVH  MA  wfLQtf  1.331823e+09   \n",
       "1             NaN  US       Provo  mwszkS  UT  mwszkS  1.308262e+09   \n",
       "2           en-US  US  Washington  xxr3Qb  DC  xxr3Qb  1.331920e+09   \n",
       "3           pt-br  BR        Braz  zCaLwp  27  zUtuOu  1.331923e+09   \n",
       "4  en-US,en;q=0.8  US  Shrewsbury  9b6kNl  MA  9b6kNl  1.273672e+09   \n",
       "\n",
       "          hh   kw         l                        ll   nk  \\\n",
       "0  1.usa.gov  NaN   orofrog   [42.576698, -70.954903]  1.0   \n",
       "1       j.mp  NaN     bitly  [40.218102, -111.613297]  0.0   \n",
       "2  1.usa.gov  NaN     bitly     [38.9007, -77.043098]  1.0   \n",
       "3  1.usa.gov  NaN  alelex88  [-23.549999, -46.616699]  0.0   \n",
       "4     bit.ly  NaN     bitly   [42.286499, -71.714699]  0.0   \n",
       "\n",
       "                                                   r             t  \\\n",
       "0  http://www.facebook.com/l/7AQEFzjSi/1.usa.gov/...  1.331923e+09   \n",
       "1                           http://www.AwareMap.com/  1.331923e+09   \n",
       "2                               http://t.co/03elZC4Q  1.331923e+09   \n",
       "3                                             direct  1.331923e+09   \n",
       "4                http://www.shrewsbury-ma.gov/selco/  1.331923e+09   \n",
       "\n",
       "                  tz                                                  u  \n",
       "0   America/New_York        http://www.ncbi.nlm.nih.gov/pubmed/22415991  \n",
       "1     America/Denver        http://www.monroecounty.gov/etc/911/rss.php  \n",
       "2   America/New_York  http://boxer.senate.gov/en/press/releases/0316...  \n",
       "3  America/Sao_Paulo            http://apod.nasa.gov/apod/ap120312.html  \n",
       "4   America/New_York  http://www.shrewsbury-ma.gov/egov/gallery/1341...  "
      ]
     },
     "execution_count": 29,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "frame.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 30,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "'Mozilla/5.0 (Linux; U; Android 2.2.2; en-us; LG-P925/V10e Build/FRG83G) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1'"
      ]
     },
     "execution_count": 30,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "frame.a[51]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 31,
   "metadata": {},
   "outputs": [],
   "source": [
    "results = pd.Series([x.split()[0] for x in frame.a.dropna()])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 32,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0               Mozilla/5.0\n",
       "1    GoogleMaps/RochesterNY\n",
       "2               Mozilla/4.0\n",
       "3               Mozilla/5.0\n",
       "4               Mozilla/5.0\n",
       "dtype: object"
      ]
     },
     "execution_count": 32,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "results[:5]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 33,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Mozilla/5.0                                          2594\n",
       "Mozilla/4.0                                           601\n",
       "GoogleMaps/RochesterNY                                121\n",
       "Opera/9.80                                             34\n",
       "TEST_INTERNET_AGENT                                    24\n",
       "GoogleProducer                                         21\n",
       "Mozilla/6.0                                             5\n",
       "BlackBerry8520/5.0.0.681                                4\n",
       "BlackBerry8520/5.0.0.592                                3\n",
       "Dalvik/1.4.0                                            3\n",
       "BlackBerry9630/5.0.0.975                                2\n",
       "Goldfire                                                2\n",
       "Socialite/7766                                          2\n",
       "Acoon                                                   2\n",
       "Opera/9.50                                              1\n",
       "Opera/9.30                                              1\n",
       "Opera/9.00                                              1\n",
       "BlackBerry9700/5.0.0.423                                1\n",
       "MOT-MB525/Blur_Version.34.4.709.MB525.Latam.en.01       1\n",
       "NokiaC3-00/5.0                                          1\n",
       "Vancouver                                               1\n",
       "BlackBerry8530/5.0.0.654                                1\n",
       "BlackBerry9530/5.0.0.328                                1\n",
       "Opera/9.64(Windows                                      1\n",
       "Mozilla/0.6                                             1\n",
       "BlackBerry9700/5.0.0.862                                1\n",
       "Nokia6790s-1b/ATT.03.22                                 1\n",
       "LG-GW382f/V10d                                          1\n",
       "HTTP_Request2/2.0.0                                     1\n",
       "BlackBerry9300/5.0.0.997                                1\n",
       "Vodafone/1.0/LG-KU990i/V10c                             1\n",
       "SAMSUNG-SGH-A887/A887UCIJ1                              1\n",
       "BlackBerry8520/5.0.0.1067                               1\n",
       "LG-LG220C[TF268435458416597116000000013524223841]       1\n",
       "ICE                                                     1\n",
       "sometrik.com                                            1\n",
       "dtype: int64"
      ]
     },
     "execution_count": 33,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "results.value_counts()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 34,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 统计windows用户和非widonws用户\n",
    "cframe = frame[frame.a.notnull()]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 35,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>_heartbeat_</th>\n",
       "      <th>a</th>\n",
       "      <th>al</th>\n",
       "      <th>c</th>\n",
       "      <th>cy</th>\n",
       "      <th>g</th>\n",
       "      <th>gr</th>\n",
       "      <th>h</th>\n",
       "      <th>hc</th>\n",
       "      <th>hh</th>\n",
       "      <th>kw</th>\n",
       "      <th>l</th>\n",
       "      <th>ll</th>\n",
       "      <th>nk</th>\n",
       "      <th>r</th>\n",
       "      <th>t</th>\n",
       "      <th>tz</th>\n",
       "      <th>u</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>NaN</td>\n",
       "      <td>Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKi...</td>\n",
       "      <td>en-US,en;q=0.8</td>\n",
       "      <td>US</td>\n",
       "      <td>Danvers</td>\n",
       "      <td>A6qOVH</td>\n",
       "      <td>MA</td>\n",
       "      <td>wfLQtf</td>\n",
       "      <td>1.331823e+09</td>\n",
       "      <td>1.usa.gov</td>\n",
       "      <td>NaN</td>\n",
       "      <td>orofrog</td>\n",
       "      <td>[42.576698, -70.954903]</td>\n",
       "      <td>1.0</td>\n",
       "      <td>http://www.facebook.com/l/7AQEFzjSi/1.usa.gov/...</td>\n",
       "      <td>1.331923e+09</td>\n",
       "      <td>America/New_York</td>\n",
       "      <td>http://www.ncbi.nlm.nih.gov/pubmed/22415991</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>NaN</td>\n",
       "      <td>GoogleMaps/RochesterNY</td>\n",
       "      <td>NaN</td>\n",
       "      <td>US</td>\n",
       "      <td>Provo</td>\n",
       "      <td>mwszkS</td>\n",
       "      <td>UT</td>\n",
       "      <td>mwszkS</td>\n",
       "      <td>1.308262e+09</td>\n",
       "      <td>j.mp</td>\n",
       "      <td>NaN</td>\n",
       "      <td>bitly</td>\n",
       "      <td>[40.218102, -111.613297]</td>\n",
       "      <td>0.0</td>\n",
       "      <td>http://www.AwareMap.com/</td>\n",
       "      <td>1.331923e+09</td>\n",
       "      <td>America/Denver</td>\n",
       "      <td>http://www.monroecounty.gov/etc/911/rss.php</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>NaN</td>\n",
       "      <td>Mozilla/4.0 (compatible; MSIE 8.0; Windows NT ...</td>\n",
       "      <td>en-US</td>\n",
       "      <td>US</td>\n",
       "      <td>Washington</td>\n",
       "      <td>xxr3Qb</td>\n",
       "      <td>DC</td>\n",
       "      <td>xxr3Qb</td>\n",
       "      <td>1.331920e+09</td>\n",
       "      <td>1.usa.gov</td>\n",
       "      <td>NaN</td>\n",
       "      <td>bitly</td>\n",
       "      <td>[38.9007, -77.043098]</td>\n",
       "      <td>1.0</td>\n",
       "      <td>http://t.co/03elZC4Q</td>\n",
       "      <td>1.331923e+09</td>\n",
       "      <td>America/New_York</td>\n",
       "      <td>http://boxer.senate.gov/en/press/releases/0316...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>NaN</td>\n",
       "      <td>Mozilla/5.0 (Macintosh; Intel Mac OS X 10_6_8)...</td>\n",
       "      <td>pt-br</td>\n",
       "      <td>BR</td>\n",
       "      <td>Braz</td>\n",
       "      <td>zCaLwp</td>\n",
       "      <td>27</td>\n",
       "      <td>zUtuOu</td>\n",
       "      <td>1.331923e+09</td>\n",
       "      <td>1.usa.gov</td>\n",
       "      <td>NaN</td>\n",
       "      <td>alelex88</td>\n",
       "      <td>[-23.549999, -46.616699]</td>\n",
       "      <td>0.0</td>\n",
       "      <td>direct</td>\n",
       "      <td>1.331923e+09</td>\n",
       "      <td>America/Sao_Paulo</td>\n",
       "      <td>http://apod.nasa.gov/apod/ap120312.html</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>NaN</td>\n",
       "      <td>Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKi...</td>\n",
       "      <td>en-US,en;q=0.8</td>\n",
       "      <td>US</td>\n",
       "      <td>Shrewsbury</td>\n",
       "      <td>9b6kNl</td>\n",
       "      <td>MA</td>\n",
       "      <td>9b6kNl</td>\n",
       "      <td>1.273672e+09</td>\n",
       "      <td>bit.ly</td>\n",
       "      <td>NaN</td>\n",
       "      <td>bitly</td>\n",
       "      <td>[42.286499, -71.714699]</td>\n",
       "      <td>0.0</td>\n",
       "      <td>http://www.shrewsbury-ma.gov/selco/</td>\n",
       "      <td>1.331923e+09</td>\n",
       "      <td>America/New_York</td>\n",
       "      <td>http://www.shrewsbury-ma.gov/egov/gallery/1341...</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   _heartbeat_                                                  a  \\\n",
       "0          NaN  Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKi...   \n",
       "1          NaN                             GoogleMaps/RochesterNY   \n",
       "2          NaN  Mozilla/4.0 (compatible; MSIE 8.0; Windows NT ...   \n",
       "3          NaN  Mozilla/5.0 (Macintosh; Intel Mac OS X 10_6_8)...   \n",
       "4          NaN  Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKi...   \n",
       "\n",
       "               al   c          cy       g  gr       h            hc  \\\n",
       "0  en-US,en;q=0.8  US     Danvers  A6qOVH  MA  wfLQtf  1.331823e+09   \n",
       "1             NaN  US       Provo  mwszkS  UT  mwszkS  1.308262e+09   \n",
       "2           en-US  US  Washington  xxr3Qb  DC  xxr3Qb  1.331920e+09   \n",
       "3           pt-br  BR        Braz  zCaLwp  27  zUtuOu  1.331923e+09   \n",
       "4  en-US,en;q=0.8  US  Shrewsbury  9b6kNl  MA  9b6kNl  1.273672e+09   \n",
       "\n",
       "          hh   kw         l                        ll   nk  \\\n",
       "0  1.usa.gov  NaN   orofrog   [42.576698, -70.954903]  1.0   \n",
       "1       j.mp  NaN     bitly  [40.218102, -111.613297]  0.0   \n",
       "2  1.usa.gov  NaN     bitly     [38.9007, -77.043098]  1.0   \n",
       "3  1.usa.gov  NaN  alelex88  [-23.549999, -46.616699]  0.0   \n",
       "4     bit.ly  NaN     bitly   [42.286499, -71.714699]  0.0   \n",
       "\n",
       "                                                   r             t  \\\n",
       "0  http://www.facebook.com/l/7AQEFzjSi/1.usa.gov/...  1.331923e+09   \n",
       "1                           http://www.AwareMap.com/  1.331923e+09   \n",
       "2                               http://t.co/03elZC4Q  1.331923e+09   \n",
       "3                                             direct  1.331923e+09   \n",
       "4                http://www.shrewsbury-ma.gov/selco/  1.331923e+09   \n",
       "\n",
       "                  tz                                                  u  \n",
       "0   America/New_York        http://www.ncbi.nlm.nih.gov/pubmed/22415991  \n",
       "1     America/Denver        http://www.monroecounty.gov/etc/911/rss.php  \n",
       "2   America/New_York  http://boxer.senate.gov/en/press/releases/0316...  \n",
       "3  America/Sao_Paulo            http://apod.nasa.gov/apod/ap120312.html  \n",
       "4   America/New_York  http://www.shrewsbury-ma.gov/egov/gallery/1341...  "
      ]
     },
     "execution_count": 35,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "cframe.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 36,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/usr/lib/python3/dist-packages/ipykernel_launcher.py:1: SettingWithCopyWarning: \n",
      "A value is trying to be set on a copy of a slice from a DataFrame.\n",
      "Try using .loc[row_indexer,col_indexer] = value instead\n",
      "\n",
      "See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy\n",
      "  \"\"\"Entry point for launching an IPython kernel.\n"
     ]
    }
   ],
   "source": [
    "cframe['os'] = np.where(cframe['a'].str.contains('Windows'), 'Windows', 'Not Windows')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 37,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0        Windows\n",
       "1    Not Windows\n",
       "2        Windows\n",
       "3    Not Windows\n",
       "4        Windows\n",
       "Name: os, dtype: object"
      ]
     },
     "execution_count": 37,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "cframe['os'][:5]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 38,
   "metadata": {},
   "outputs": [],
   "source": [
    "by_tz_os = cframe.groupby(['tz', 'os'])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 39,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<pandas.core.groupby.DataFrameGroupBy object at 0x7f5b7d3f98>"
      ]
     },
     "execution_count": 39,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "by_tz_os"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 40,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th>os</th>\n",
       "      <th>Not Windows</th>\n",
       "      <th>Windows</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>tz</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th></th>\n",
       "      <td>245.0</td>\n",
       "      <td>276.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Africa/Cairo</th>\n",
       "      <td>0.0</td>\n",
       "      <td>3.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Africa/Casablanca</th>\n",
       "      <td>0.0</td>\n",
       "      <td>1.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Africa/Ceuta</th>\n",
       "      <td>0.0</td>\n",
       "      <td>2.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Africa/Johannesburg</th>\n",
       "      <td>0.0</td>\n",
       "      <td>1.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Africa/Lusaka</th>\n",
       "      <td>0.0</td>\n",
       "      <td>1.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>America/Anchorage</th>\n",
       "      <td>4.0</td>\n",
       "      <td>1.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>America/Argentina/Buenos_Aires</th>\n",
       "      <td>1.0</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>America/Argentina/Cordoba</th>\n",
       "      <td>0.0</td>\n",
       "      <td>1.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>America/Argentina/Mendoza</th>\n",
       "      <td>0.0</td>\n",
       "      <td>1.0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "os                              Not Windows  Windows\n",
       "tz                                                  \n",
       "                                      245.0    276.0\n",
       "Africa/Cairo                            0.0      3.0\n",
       "Africa/Casablanca                       0.0      1.0\n",
       "Africa/Ceuta                            0.0      2.0\n",
       "Africa/Johannesburg                     0.0      1.0\n",
       "Africa/Lusaka                           0.0      1.0\n",
       "America/Anchorage                       4.0      1.0\n",
       "America/Argentina/Buenos_Aires          1.0      0.0\n",
       "America/Argentina/Cordoba               0.0      1.0\n",
       "America/Argentina/Mendoza               0.0      1.0"
      ]
     },
     "execution_count": 40,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "agg_counts = by_tz_os.size().unstack().fillna(0)\n",
    "agg_counts[:10]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 41,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "tz\n",
       "                                  24\n",
       "Africa/Cairo                      20\n",
       "Africa/Casablanca                 21\n",
       "Africa/Ceuta                      92\n",
       "Africa/Johannesburg               87\n",
       "Africa/Lusaka                     53\n",
       "America/Anchorage                 54\n",
       "America/Argentina/Buenos_Aires    57\n",
       "America/Argentina/Cordoba         26\n",
       "America/Argentina/Mendoza         55\n",
       "dtype: int64"
      ]
     },
     "execution_count": 41,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "indexer = agg_counts.sum(1).argsort()\n",
    "indexer[:10]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 42,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "tz\n",
       "Europe/Sofia        35\n",
       "Europe/Stockholm    78\n",
       "Europe/Uzhgorod     96\n",
       "Europe/Vienna       59\n",
       "Europe/Vilnius      77\n",
       "Europe/Volgograd    15\n",
       "Europe/Warsaw       22\n",
       "Europe/Zurich       12\n",
       "Pacific/Auckland     0\n",
       "Pacific/Honolulu    29\n",
       "dtype: int64"
      ]
     },
     "execution_count": 42,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "indexer[-10:]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 43,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th>os</th>\n",
       "      <th>Not Windows</th>\n",
       "      <th>Windows</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>tz</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>America/Sao_Paulo</th>\n",
       "      <td>13.0</td>\n",
       "      <td>20.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Europe/Madrid</th>\n",
       "      <td>16.0</td>\n",
       "      <td>19.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Pacific/Honolulu</th>\n",
       "      <td>0.0</td>\n",
       "      <td>36.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Asia/Tokyo</th>\n",
       "      <td>2.0</td>\n",
       "      <td>35.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Europe/London</th>\n",
       "      <td>43.0</td>\n",
       "      <td>31.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>America/Denver</th>\n",
       "      <td>132.0</td>\n",
       "      <td>59.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>America/Los_Angeles</th>\n",
       "      <td>130.0</td>\n",
       "      <td>252.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>America/Chicago</th>\n",
       "      <td>115.0</td>\n",
       "      <td>285.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th></th>\n",
       "      <td>245.0</td>\n",
       "      <td>276.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>America/New_York</th>\n",
       "      <td>339.0</td>\n",
       "      <td>912.0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "os                   Not Windows  Windows\n",
       "tz                                       \n",
       "America/Sao_Paulo           13.0     20.0\n",
       "Europe/Madrid               16.0     19.0\n",
       "Pacific/Honolulu             0.0     36.0\n",
       "Asia/Tokyo                   2.0     35.0\n",
       "Europe/London               43.0     31.0\n",
       "America/Denver             132.0     59.0\n",
       "America/Los_Angeles        130.0    252.0\n",
       "America/Chicago            115.0    285.0\n",
       "                           245.0    276.0\n",
       "America/New_York           339.0    912.0"
      ]
     },
     "execution_count": 43,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "count_subset = agg_counts.take(indexer[-10:])\n",
    "count_subset"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 44,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "tz\n",
       "                                   521.0\n",
       "Africa/Cairo                         3.0\n",
       "Africa/Casablanca                    1.0\n",
       "Africa/Ceuta                         2.0\n",
       "Africa/Johannesburg                  1.0\n",
       "Africa/Lusaka                        1.0\n",
       "America/Anchorage                    5.0\n",
       "America/Argentina/Buenos_Aires       1.0\n",
       "America/Argentina/Cordoba            1.0\n",
       "America/Argentina/Mendoza            1.0\n",
       "America/Bogota                       3.0\n",
       "America/Caracas                      1.0\n",
       "America/Chicago                    400.0\n",
       "America/Chihuahua                    2.0\n",
       "America/Costa_Rica                   1.0\n",
       "America/Denver                     191.0\n",
       "America/Edmonton                     6.0\n",
       "America/Guayaquil                    2.0\n",
       "America/Halifax                      4.0\n",
       "America/Indianapolis                20.0\n",
       "America/La_Paz                       1.0\n",
       "America/Lima                         1.0\n",
       "America/Los_Angeles                382.0\n",
       "America/Managua                      3.0\n",
       "America/Mazatlan                     1.0\n",
       "America/Mexico_City                 15.0\n",
       "America/Monterrey                    1.0\n",
       "America/Montevideo                   1.0\n",
       "America/Montreal                     9.0\n",
       "America/New_York                  1251.0\n",
       "                                   ...  \n",
       "Europe/Berlin                       28.0\n",
       "Europe/Bratislava                    3.0\n",
       "Europe/Brussels                      4.0\n",
       "Europe/Bucharest                     4.0\n",
       "Europe/Budapest                      5.0\n",
       "Europe/Copenhagen                    5.0\n",
       "Europe/Dublin                        3.0\n",
       "Europe/Helsinki                     10.0\n",
       "Europe/Lisbon                        8.0\n",
       "Europe/Ljubljana                     1.0\n",
       "Europe/London                       74.0\n",
       "Europe/Madrid                       35.0\n",
       "Europe/Malta                         2.0\n",
       "Europe/Moscow                       10.0\n",
       "Europe/Oslo                         10.0\n",
       "Europe/Paris                        14.0\n",
       "Europe/Prague                       10.0\n",
       "Europe/Riga                          2.0\n",
       "Europe/Rome                         27.0\n",
       "Europe/Skopje                        1.0\n",
       "Europe/Sofia                         1.0\n",
       "Europe/Stockholm                    14.0\n",
       "Europe/Uzhgorod                      1.0\n",
       "Europe/Vienna                        6.0\n",
       "Europe/Vilnius                       2.0\n",
       "Europe/Volgograd                     1.0\n",
       "Europe/Warsaw                       16.0\n",
       "Europe/Zurich                        4.0\n",
       "Pacific/Auckland                    11.0\n",
       "Pacific/Honolulu                    36.0\n",
       "Length: 97, dtype: float64"
      ]
     },
     "execution_count": 44,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "agg_counts.sum(1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 45,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "tz\n",
       "America/New_York       1251.0\n",
       "                        521.0\n",
       "America/Chicago         400.0\n",
       "America/Los_Angeles     382.0\n",
       "America/Denver          191.0\n",
       "Europe/London            74.0\n",
       "Asia/Tokyo               37.0\n",
       "Pacific/Honolulu         36.0\n",
       "Europe/Madrid            35.0\n",
       "America/Sao_Paulo        33.0\n",
       "dtype: float64"
      ]
     },
     "execution_count": 45,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "agg_counts.sum(1).nlargest(10)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 47,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th>os</th>\n",
       "      <th>Not Windows</th>\n",
       "      <th>Windows</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>tz</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>America/Sao_Paulo</th>\n",
       "      <td>13.0</td>\n",
       "      <td>20.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Europe/Madrid</th>\n",
       "      <td>16.0</td>\n",
       "      <td>19.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Pacific/Honolulu</th>\n",
       "      <td>0.0</td>\n",
       "      <td>36.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Asia/Tokyo</th>\n",
       "      <td>2.0</td>\n",
       "      <td>35.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Europe/London</th>\n",
       "      <td>43.0</td>\n",
       "      <td>31.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>America/Denver</th>\n",
       "      <td>132.0</td>\n",
       "      <td>59.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>America/Los_Angeles</th>\n",
       "      <td>130.0</td>\n",
       "      <td>252.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>America/Chicago</th>\n",
       "      <td>115.0</td>\n",
       "      <td>285.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th></th>\n",
       "      <td>245.0</td>\n",
       "      <td>276.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>America/New_York</th>\n",
       "      <td>339.0</td>\n",
       "      <td>912.0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "os                   Not Windows  Windows\n",
       "tz                                       \n",
       "America/Sao_Paulo           13.0     20.0\n",
       "Europe/Madrid               16.0     19.0\n",
       "Pacific/Honolulu             0.0     36.0\n",
       "Asia/Tokyo                   2.0     35.0\n",
       "Europe/London               43.0     31.0\n",
       "America/Denver             132.0     59.0\n",
       "America/Los_Angeles        130.0    252.0\n",
       "America/Chicago            115.0    285.0\n",
       "                           245.0    276.0\n",
       "America/New_York           339.0    912.0"
      ]
     },
     "execution_count": 47,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "count_subset[:10]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 48,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "tz                 os         \n",
       "America/Sao_Paulo  Not Windows    13.0\n",
       "                   Windows        20.0\n",
       "Europe/Madrid      Not Windows    16.0\n",
       "                   Windows        19.0\n",
       "Pacific/Honolulu   Not Windows     0.0\n",
       "                   Windows        36.0\n",
       "Asia/Tokyo         Not Windows     2.0\n",
       "                   Windows        35.0\n",
       "Europe/London      Not Windows    43.0\n",
       "                   Windows        31.0\n",
       "dtype: float64"
      ]
     },
     "execution_count": 48,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "count_subset.stack()[:10]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 49,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>tz</th>\n",
       "      <th>os</th>\n",
       "      <th>total</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>America/Sao_Paulo</td>\n",
       "      <td>Not Windows</td>\n",
       "      <td>13.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>America/Sao_Paulo</td>\n",
       "      <td>Windows</td>\n",
       "      <td>20.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>Europe/Madrid</td>\n",
       "      <td>Not Windows</td>\n",
       "      <td>16.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>Europe/Madrid</td>\n",
       "      <td>Windows</td>\n",
       "      <td>19.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>Pacific/Honolulu</td>\n",
       "      <td>Not Windows</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>Pacific/Honolulu</td>\n",
       "      <td>Windows</td>\n",
       "      <td>36.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>Asia/Tokyo</td>\n",
       "      <td>Not Windows</td>\n",
       "      <td>2.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>Asia/Tokyo</td>\n",
       "      <td>Windows</td>\n",
       "      <td>35.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>Europe/London</td>\n",
       "      <td>Not Windows</td>\n",
       "      <td>43.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>Europe/London</td>\n",
       "      <td>Windows</td>\n",
       "      <td>31.0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                  tz           os  total\n",
       "0  America/Sao_Paulo  Not Windows   13.0\n",
       "1  America/Sao_Paulo      Windows   20.0\n",
       "2      Europe/Madrid  Not Windows   16.0\n",
       "3      Europe/Madrid      Windows   19.0\n",
       "4   Pacific/Honolulu  Not Windows    0.0\n",
       "5   Pacific/Honolulu      Windows   36.0\n",
       "6         Asia/Tokyo  Not Windows    2.0\n",
       "7         Asia/Tokyo      Windows   35.0\n",
       "8      Europe/London  Not Windows   43.0\n",
       "9      Europe/London      Windows   31.0"
      ]
     },
     "execution_count": 49,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "count_subset_1 = count_subset.stack()\n",
    "count_subset_1.name = 'total'\n",
    "count_subset_1 = count_subset_1.reset_index()\n",
    "count_subset_1[:10]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 50,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.axes._subplots.AxesSubplot at 0x7f5b699588>"
      ]
     },
     "execution_count": 50,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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TsA5SDeePVPBpoHb8dUiM7Na4eqrr+bqq6/eouwLX/hCTtHUHE7AOUhJtpibxczMrI5yArZKNWl3JB1uLM07DDOzOqkm3AVtZmZW7zgBm5mZ5cAJ2MzMLAe+BmyVWrZiFT2vHb9F2byRQ3OKxsysbnECNjOrhcr/cbyzivnjWhJXX301P/nJTwC47bbbWLduHSNGjKh0n0mTJnHooYdyxBFHbFH+/vvvc9BBB7Fy5UokMXv2bHr37s0777zDfvvtx9q1a+nUqRMrV65kxIgR9O/fn0GDBhV9PB07dqS0tJS999676H12N09Bm5lZUZo2bcqjjz7KypUri95n0qRJvPzyy1uV77XXXvzrv/4ry5YtA2DWrFl0796dWbNmATBnzhyOPfZYGjRowC233LJdybe2cAI2M7OiNGrUiOHDh3P77bdvte2tt95i4MCBdO3alYEDB/L2228za9YsHn/8ca699lq6devG66+/vsU+ffr02ZxwZ82axVVXXbXFeu/evQEYNmwYjzzyCJCNbG+66SZ69OhBly5deOWVVwBYtWoVJ510Et27d+fiiy/e4hnU5V+HCPDjH/+YUaNGAXDVVVdxwgknAPDMM89w/vnns3HjRoYNG0bnzp3p0qVLhce8s5yAzcysaJdeeikPPfTQVq8QvOyyyxg6dCiLFy/mvPPO44orrqB3796ceuqpjBw5koULF3LQQQdtsU/v3r03J9zly5fzla98hdLS7NkDs2bNok+fPhXGsPfeezN//ny++c1vcttttwFw880307dvXxYsWMCpp57K22+/DWz5OsQ5c+Zw//33s2DBAvr378+MGdmL6UpLS1m3bh0ff/wxM2fOpF+/fixcuJC//vWvvPTSSyxZsoQLLrhg153EpM4nYEkbJS0s+Lku53iul3SepBGSQtLBBduuSmVFPcg77TMgvZO4om0lkkZVsu1NSTX34oiZ1UgtW7Zk6NChm0ePZWbPns1Xv5q9xO5rX/saM2fO3GZbZSPgN954g44dO9KsWTMignXr1jFv3rzNz48u74wzzgCgZ8+evPnmmwBMnz6d888/H4BTTjmF1q1bAxW/DnHGjBn07NmTefPm8cEHH9C0aVN69epFaWkpM2bMoF+/fhx44IEsX76cyy+/nClTptCyZcsdOl9VqfMJmPSC+4KfW4vdUVJ13KR2Etn7iAGWAOcW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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7f5b708e48>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "sns.barplot(x='total', y='tz', hue='os', data=count_subset_1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 51,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 上述不容易看出windows用户在小分组中的相对比例，对此进行标准化\n",
    "def norm_total(group):\n",
    "    group['normed_total'] = group.total / group.total.sum()\n",
    "    return group"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 53,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.axes._subplots.AxesSubplot at 0x7f5acb82e8>"
      ]
     },
     "execution_count": 53,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7f5b5b5c18>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "results = count_subset_1.groupby('tz').apply(norm_total)\n",
    "sns.barplot(x='normed_total', y='tz', hue='os', data=results)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.7"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
